package com.xwtec.observer.v5;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author: zt
 * @Date: 2021/2/28 21:13
 * 分离观察者与被观察者
 */
public class Main {
    public static void main(String[] args) {
      Child child = new Child();
        child.wakeUp();
    }
}

class Child{
    boolean cry = false;
    private List<Observer> observers = new ArrayList<Observer>();
    {
        observers.add(new Dad());
        observers.add(new Mum());
        observers.add(new Dog());
    }

    public void wakeUp(){
        cry = true;
        for (Observer o:observers) {
            o.actionWakeUp();
        }
    }

}

//观察者接口，方法是所有的观察者都要实现小孩醒的动作
interface Observer{
    void actionWakeUp();
}
/**
 * 父亲作为观察者
 */
class Dad implements Observer{

    //观察者执行的方法
    public void feed(){
        System.out.println("Dad,feeding............");
    }

    @Override
    public void actionWakeUp() {
        feed();
    }
}

/**
 * 母亲作为观察者
 */
class Mum implements Observer{

    //观察者执行的方法
    public void hug(){
        System.out.println("Mum,hugging............");
    }

    @Override
    public void actionWakeUp() {
        hug();
    }
}

/**
 * 狗作为观察者
 */
class Dog implements Observer{

    //观察者执行的方法
    public void wang(){
        System.out.println("Dog,wang............");
    }

    @Override
    public void actionWakeUp() {
        wang();
    }
}
